package 链表;

//  抽象类，用来存放ArrayList和LinkList的公共部分（一样的部分），作为他们两个的父类，并且其他类是无法new一个抽象类的对象的
//  abstract用来声明这个类是抽象类，这样就不用完全实现接口的的方法，可以由子类来实现
public abstract class AbstractList<E> implements List<E>{

    protected int size;



    /* size方法，查询元素的数量，直接返回size */
    public int size(){
        return size;
    }

    /* isEmpty方法，判断是否为空 */
    public boolean isEmpty(){
        if (size == 0){
            return true;
        }else {
            return false;
        }
    }

//    /* contains方法，查询数组是否包含这个元素,调用indexOf方法如果这个元素不返回-1说明存在这个元素 */
//    public boolean contains(E element){
//        if (indexOf(element) != ELEMENT_NOT_FOUND){
//            return true;
//        }else {
//            return false;
//        }
//    }

    /* outOfBounds方法，判断下标是否越界 */

//    /* indexOf方法，查询元素的索引,发生异常返回-1 */
//    public int indexOf(E element){
//
//        // 如果传入的element是空值的情况
//        if(element == null){
//            for (int i = 0;i<size;i++){
//                if (elements[i] == null){
//                    return i;
//                }
//            }
//        }else {
//            for (int i = 0;i < size;i++){
//
//                // 如果不用equals比较，那么比较的就是内存地址（不建议），如果用equals比较，比较的就是具体的值。如果自定义的数据类型使用equals比较
//                // 那么，要在那个数据类型的类里面重写equals，否则默认的equals还是比较的是地址。
//                if (element.equals(elements[i])){
//                    return i;
//                }
//            }
//        }
//
//        return ELEMENT_NOT_FOUND;
//    }

//    /* contains方法，查询数组是否包含这个元素,调用indexOf方法如果这个元素不返回-1说明存在这个元素 */
//    public boolean contains(E element){
//        if (indexOf(element) != ELEMENT_NOT_FOUND){
//            return true;
//        }else {
//            return false;
//        }
//    }
//
//    /* add方法，在数组最后面添加元素,添加的位置等于size */
//    public void add(E element) {
////         elements[size] = element;
////         size++;
//
//        add(size,element);
//
//    }

//    /* add方法，在指定的位置添加元素 */
//    public void add(int index,E element){
//
//        ensureCapacity(size+1);
//
//        if (index < 0 || index > size){
//            throw new IndexOutOfBoundsException("异常提醒：你好像下标越界了，你的元素数量是:" + size);
//        }else {
//            for (int i =size-1;i>index;i--){
//                elements[i+1] = elements[i];
//            }
//            elements[index] = element;
//            size++;
//        }
//    }

    public void CheckRange(int index){
        if (index < 0 || index > size){
            throw new IndexOutOfBoundsException("异常提醒：你好像下标越界了，你的元素数量是:" + size);
        }
    }
}
